{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# HW2_Pima Indians"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns \n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 读取数据&数据探索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data=pd.read_csv('diabetes.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 768 entries, 0 to 767\n",
      "Data columns (total 9 columns):\n",
      "Pregnancies                 768 non-null int64\n",
      "Glucose                     768 non-null int64\n",
      "BloodPressure               768 non-null int64\n",
      "SkinThickness               768 non-null int64\n",
      "Insulin                     768 non-null int64\n",
      "BMI                         768 non-null float64\n",
      "DiabetesPedigreeFunction    768 non-null float64\n",
      "Age                         768 non-null int64\n",
      "Outcome                     768 non-null int64\n",
      "dtypes: float64(2), int64(7)\n",
      "memory usage: 54.1 KB\n"
     ]
    }
   ],
   "source": [
    "data.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "发现数据不存在Nan值，也没有object值，可以直接进行数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "      <td>768.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>3.845052</td>\n",
       "      <td>120.894531</td>\n",
       "      <td>69.105469</td>\n",
       "      <td>20.536458</td>\n",
       "      <td>79.799479</td>\n",
       "      <td>31.992578</td>\n",
       "      <td>0.471876</td>\n",
       "      <td>33.240885</td>\n",
       "      <td>0.348958</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>3.369578</td>\n",
       "      <td>31.972618</td>\n",
       "      <td>19.355807</td>\n",
       "      <td>15.952218</td>\n",
       "      <td>115.244002</td>\n",
       "      <td>7.884160</td>\n",
       "      <td>0.331329</td>\n",
       "      <td>11.760232</td>\n",
       "      <td>0.476951</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.078000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>62.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>27.300000</td>\n",
       "      <td>0.243750</td>\n",
       "      <td>24.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>3.000000</td>\n",
       "      <td>117.000000</td>\n",
       "      <td>72.000000</td>\n",
       "      <td>23.000000</td>\n",
       "      <td>30.500000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>0.372500</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>140.250000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>127.250000</td>\n",
       "      <td>36.600000</td>\n",
       "      <td>0.626250</td>\n",
       "      <td>41.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>17.000000</td>\n",
       "      <td>199.000000</td>\n",
       "      <td>122.000000</td>\n",
       "      <td>99.000000</td>\n",
       "      <td>846.000000</td>\n",
       "      <td>67.100000</td>\n",
       "      <td>2.420000</td>\n",
       "      <td>81.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Pregnancies     Glucose  BloodPressure  SkinThickness     Insulin  \\\n",
       "count   768.000000  768.000000     768.000000     768.000000  768.000000   \n",
       "mean      3.845052  120.894531      69.105469      20.536458   79.799479   \n",
       "std       3.369578   31.972618      19.355807      15.952218  115.244002   \n",
       "min       0.000000    0.000000       0.000000       0.000000    0.000000   \n",
       "25%       1.000000   99.000000      62.000000       0.000000    0.000000   \n",
       "50%       3.000000  117.000000      72.000000      23.000000   30.500000   \n",
       "75%       6.000000  140.250000      80.000000      32.000000  127.250000   \n",
       "max      17.000000  199.000000     122.000000      99.000000  846.000000   \n",
       "\n",
       "              BMI  DiabetesPedigreeFunction         Age     Outcome  \n",
       "count  768.000000                768.000000  768.000000  768.000000  \n",
       "mean    31.992578                  0.471876   33.240885    0.348958  \n",
       "std      7.884160                  0.331329   11.760232    0.476951  \n",
       "min      0.000000                  0.078000   21.000000    0.000000  \n",
       "25%     27.300000                  0.243750   24.000000    0.000000  \n",
       "50%     32.000000                  0.372500   29.000000    0.000000  \n",
       "75%     36.600000                  0.626250   41.000000    1.000000  \n",
       "max     67.100000                  2.420000   81.000000    1.000000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "min值没有出现负值，初步判断没有异常值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0,0.5,'Number of disables')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "sns.countplot(data.Outcome)\n",
    "pyplot.xlabel('Outcome')\n",
    "pyplot.ylabel('Number of disables')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "观察样本分布情况，显示是一个0-1分类问题，样本分布相对比较均衡"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  \n",
       "0                     0.627   50  \n",
       "1                     0.351   31  \n",
       "2                     0.672   32  \n",
       "3                     0.167   21  \n",
       "4                     2.288   33  "
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "y_data = data['Outcome']\n",
    "X_data = data.drop(['Outcome'],axis=1)\n",
    "X_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_split.py:2026: FutureWarning: From version 0.21, test_size will always complement train_size unless both are specified.\n",
      "  FutureWarning)\n"
     ]
    }
   ],
   "source": [
    "#将数据进行切分，随机80%作为训练集\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "ss_X=StandardScaler()\n",
    "\n",
    "X_data =ss_X.fit_transform(X_data)\n",
    "\n",
    "X_train,X_test,y_train,y_test=train_test_split(X_data,y_data,train_size=0.8)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 模型训练"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "###  Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='accuracy', verbose=0)"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.cross_validation import cross_val_score\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "lr= LogisticRegression()\n",
    "\n",
    "penaltys = ['l1','l2']\n",
    "\n",
    "Cs = [0.001, 0.01, 0.1, 1, 10, 100, 1000]\n",
    "\n",
    "tuned_parameters = dict(penalty = penaltys, C = Cs)\n",
    "\n",
    "grid= GridSearchCV(lr, tuned_parameters,cv=5, scoring='accuracy')\n",
    "\n",
    "#考虑用的是交叉验证模型性能，所以这里采用全部数据,但是为了和SVM模型比较这里还是用训练集\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00071974, 0.00095229, 0.00076218, 0.00124302, 0.001229  ,\n",
       "        0.00125871, 0.00111794, 0.00107112, 0.00107508, 0.00098662,\n",
       "        0.00100579, 0.00098901, 0.00101185, 0.00094447]),\n",
       " 'std_fit_time': array([7.43020935e-05, 3.75254181e-05, 1.42863468e-05, 8.40418694e-05,\n",
       "        1.41712474e-04, 2.15056128e-04, 7.19455469e-05, 1.06138917e-04,\n",
       "        6.87422247e-05, 5.22682697e-05, 2.04821404e-05, 6.72971483e-05,\n",
       "        3.87269867e-05, 2.81828914e-05]),\n",
       " 'mean_score_time': array([0.00027132, 0.00027151, 0.00027103, 0.00035501, 0.00034719,\n",
       "        0.00029974, 0.00025063, 0.00025578, 0.0002398 , 0.00023093,\n",
       "        0.00022817, 0.00022788, 0.00023503, 0.00022149]),\n",
       " 'std_score_time': array([1.45415789e-05, 9.22578244e-06, 1.17561395e-05, 3.71348705e-05,\n",
       "        9.23615728e-05, 6.33374381e-05, 1.55776212e-05, 9.75641919e-06,\n",
       "        1.74064505e-05, 2.11828434e-05, 8.62007640e-06, 9.76224371e-06,\n",
       "        2.28660198e-05, 4.68418186e-06]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([0.64227642, 0.71544715, 0.68292683, 0.74796748, 0.75609756,\n",
       "        0.75609756, 0.75609756, 0.75609756, 0.75609756, 0.75609756,\n",
       "        0.75609756, 0.75609756, 0.75609756, 0.75609756]),\n",
       " 'split1_test_score': array([0.64227642, 0.7804878 , 0.71544715, 0.78861789, 0.80487805,\n",
       "        0.81300813, 0.80487805, 0.80487805, 0.80487805, 0.80487805,\n",
       "        0.80487805, 0.80487805, 0.80487805, 0.80487805]),\n",
       " 'split2_test_score': array([0.64227642, 0.7398374 , 0.74796748, 0.76422764, 0.74796748,\n",
       "        0.77235772, 0.77235772, 0.77235772, 0.76422764, 0.76422764,\n",
       "        0.76422764, 0.76422764, 0.76422764, 0.76422764]),\n",
       " 'split3_test_score': array([0.64227642, 0.76422764, 0.65853659, 0.77235772, 0.78861789,\n",
       "        0.79674797, 0.80487805, 0.80487805, 0.80487805, 0.80487805,\n",
       "        0.80487805, 0.80487805, 0.80487805, 0.80487805]),\n",
       " 'split4_test_score': array([0.63934426, 0.70491803, 0.70491803, 0.7295082 , 0.73770492,\n",
       "        0.7704918 , 0.77868852, 0.77868852, 0.77868852, 0.77868852,\n",
       "        0.77868852, 0.77868852, 0.77868852, 0.77868852]),\n",
       " 'mean_test_score': array([0.64169381, 0.74104235, 0.7019544 , 0.76058632, 0.76710098,\n",
       "        0.78175896, 0.78338762, 0.78338762, 0.78175896, 0.78175896,\n",
       "        0.78175896, 0.78175896, 0.78175896, 0.78175896]),\n",
       " 'std_test_score': array([0.00116999, 0.02846405, 0.03020776, 0.02028878, 0.02545436,\n",
       "        0.02038316, 0.01905222, 0.01905222, 0.0202362 , 0.0202362 ,\n",
       "        0.0202362 , 0.0202362 , 0.0202362 , 0.0202362 ]),\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  3,  1,  1,  3,  3,  3,  3,  3,  3],\n",
       "       dtype=int32),\n",
       " 'split0_train_score': array([0.64154786, 0.74745418, 0.70672098, 0.77189409, 0.79633401,\n",
       "        0.78411405, 0.79022403, 0.79226069, 0.79226069, 0.79226069,\n",
       "        0.79226069, 0.79226069, 0.79226069, 0.79226069]),\n",
       " 'split1_train_score': array([0.64154786, 0.74541752, 0.69857434, 0.75967413, 0.76171079,\n",
       "        0.77393075, 0.77596741, 0.77596741, 0.77596741, 0.77596741,\n",
       "        0.77596741, 0.77596741, 0.77596741, 0.77596741]),\n",
       " 'split2_train_score': array([0.64154786, 0.75967413, 0.6904277 , 0.78818737, 0.78207739,\n",
       "        0.79226069, 0.79633401, 0.79633401, 0.79633401, 0.79633401,\n",
       "        0.79633401, 0.79633401, 0.79633401, 0.79633401]),\n",
       " 'split3_train_score': array([0.64154786, 0.75967413, 0.71283096, 0.78004073, 0.78411405,\n",
       "        0.79837067, 0.79429735, 0.79633401, 0.79022403, 0.79022403,\n",
       "        0.79022403, 0.79022403, 0.79022403, 0.79022403]),\n",
       " 'split4_train_score': array([0.64227642, 0.76219512, 0.70121951, 0.77235772, 0.78658537,\n",
       "        0.78252033, 0.78658537, 0.78658537, 0.78658537, 0.78658537,\n",
       "        0.78658537, 0.78658537, 0.78658537, 0.78658537]),\n",
       " 'mean_train_score': array([0.64169357, 0.75488302, 0.7019547 , 0.77443081, 0.78216432,\n",
       "        0.7862393 , 0.78868164, 0.7894963 , 0.7882743 , 0.7882743 ,\n",
       "        0.7882743 , 0.7882743 , 0.7882743 , 0.7882743 ]),\n",
       " 'std_train_score': array([0.00029142, 0.00698799, 0.00756108, 0.00947846, 0.01133562,\n",
       "        0.00840565, 0.00719055, 0.00765055, 0.00691323, 0.00691323,\n",
       "        0.00691323, 0.00691323, 0.00691323, 0.00691323])}"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.7833876221498371\n",
      "{'C': 1, 'penalty': 'l1'}\n"
     ]
    }
   ],
   "source": [
    "print(grid.best_score_)\n",
    "print(grid.best_params_)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "C的最佳值1在候选参数中间，不用再尝试其他取值了，最佳惩罚是L1正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7402597402597403\n"
     ]
    }
   ],
   "source": [
    "# from sklearn.metrics import log_loss\n",
    "# y_pre_SV1=grid.predict(X_test)\n",
    "# accuracy=log_loss(y_test,y_pre_SV1)\n",
    "lr_best=grid.best_estimator_\n",
    "accuracy=lr_best.score(X_test,y_test)\n",
    "\n",
    "print(\"accuracy: {}\".format(accuracy))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "logstic最佳模型的准确率为0.7402"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/home/ztt/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# plot CV误差曲线\n",
    "test_means = grid.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = grid.cv_results_[ 'std_test_score' ]\n",
    "train_means = grid.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = grid.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "# plot results\n",
    "n_Cs = len(Cs)\n",
    "number_penaltys = len(penaltys)\n",
    "test_scores = np.array(test_means).reshape(n_Cs,number_penaltys)\n",
    "train_scores = np.array(train_means).reshape(n_Cs,number_penaltys)\n",
    "test_stds = np.array(test_stds).reshape(n_Cs,number_penaltys)\n",
    "train_stds = np.array(train_stds).reshape(n_Cs,number_penaltys)\n",
    "\n",
    "x_axis = np.log10(Cs)\n",
    "for i, value in enumerate(penaltys):\n",
    "    #pyplot.plot(log(Cs), test_scores[i], label= 'penalty:'   + str(value))\n",
    "    pyplot.errorbar(x_axis, test_scores[:,i], yerr=test_stds[:,i] ,label = penaltys[i] +' Test')\n",
    "    pyplot.errorbar(x_axis, train_scores[:,i], yerr=train_stds[:,i] ,label = penaltys[i] +' Train')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图中可以明显的看出L2一开始要高于L1，随着C的增加，模型性能也是越来越好。从图上看好像L2要好于L1，不知道为什么结果是L1要好，这里我有个问题，我这个图上的竖线是什么意思？为什么这么长。。。是有什么不好的影响吗，还是能在pyplot里面设置的。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### SVM"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### default SVC"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Classification report for classifier LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,\n",
      "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
      "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
      "     verbose=0):\n",
      "             precision    recall  f1-score   support\n",
      "\n",
      "          0       0.79      0.85      0.82       106\n",
      "          1       0.60      0.50      0.55        48\n",
      "\n",
      "avg / total       0.73      0.74      0.73       154\n",
      "\n",
      "\n",
      "Confusion matrix:\n",
      "[[90 16]\n",
      " [24 24]]\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "from sklearn.metrics import accuracy_score\n",
    "import sklearn as sk\n",
    "SVC1 = LinearSVC().fit(X_train, y_train)\n",
    "\n",
    "y_pre = SVC1.predict(X_test)\n",
    "\n",
    "report_1= sk.metrics.classification_report(y_test, y_pre)\n",
    "\n",
    "matrix_1= sk.metrics.confusion_matrix(y_test, y_pre)\n",
    "print(\"Classification report for classifier %s:\\n%s\\n\"% (SVC1, report_1))\n",
    "print(\"Confusion matrix:\\n%s\" % matrix_1)  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从结果上看对非糖尿病的预测（即0的值）还是比较准确的，但是对糖尿病的预测好像不是很准，看来前面01的样本分布中，1比0的样本少还是对预测有一定的影响，需要对模型提高1的class_weight，下面用正则的SVM测试一下"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 线性SVM正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "#对模型进行neg_log_loss评分\n",
    "def fit_grid_point_Linear(C, X_train, y_train, X_test, y_test):\n",
    "    \n",
    "    SVC2=LinearSVC(C=C)\n",
    "    \n",
    "    SVC2=SVC2.fit(X_train,y_train)\n",
    "    \n",
    "    accuracy = SVC2.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    \n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No handles with labels found to put in legend.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7272727272727273\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "C_s = np.logspace(-7, 2, 10)\n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "#    for j, penalty in enumerate(penalty_s):\n",
    "    tmp = fit_grid_point_Linear(oneC, X_train, y_train, X_test, y_test)\n",
    "    accuracy_s.append(tmp)\n",
    "\n",
    "x_axis = np.log10(C_s)\n",
    "#for j, penalty in enumerate(penalty_s):\n",
    "pyplot.plot(x_axis, np.array(accuracy_s), 'b-')\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从结果上看当log(C)=-5时 accuracy在0.75左右，准确率略高于logistics回归"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### RBF核SVM正则参数调优"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.svm import SVC\n",
    "def fit_grid_point_RBF(C, gamma, X_train, y_train, X_val, y_val):\n",
    "    \n",
    "    SVC3=SVC(C=C,kernel='rbf',gamma = gamma)\n",
    "    \n",
    "    SVC3=SVC3.fit(X_train,y_train)\n",
    "    \n",
    "    accuracy = SVC3.score(X_test, y_test)\n",
    "    \n",
    "    print(\"accuracy: {}\".format(accuracy))\n",
    "    \n",
    "    return accuracy\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6948051948051948\n",
      "accuracy: 0.7597402597402597\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.7467532467532467\n",
      "accuracy: 0.7532467532467533\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.7467532467532467\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.7402597402597403\n",
      "accuracy: 0.7142857142857143\n",
      "accuracy: 0.7077922077922078\n",
      "accuracy: 0.6883116883116883\n",
      "accuracy: 0.6883116883116883\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#需要调优的参数\n",
    "C_s = np.logspace(-2, 2, 5)\n",
    "gamma_s = np.logspace(-2, 2, 5)  \n",
    "\n",
    "accuracy_s = []\n",
    "for i, oneC in enumerate(C_s):\n",
    "    for j, gamma in enumerate(gamma_s):\n",
    "        tmp = fit_grid_point_RBF(oneC, gamma, X_train, y_train, X_test, y_test)\n",
    "        accuracy_s.append(tmp)\n",
    "\n",
    "accuracy_s1 =np.array(accuracy_s).reshape(len(C_s),len(gamma_s))\n",
    "x_axis = np.log10(C_s)\n",
    "for j, gamma in enumerate(gamma_s):\n",
    "    pyplot.plot(x_axis, np.array(accuracy_s1[:,j]), label = ' Test - log(gamma)' + str(np.log10(gamma)))\n",
    "\n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'log(C)' )                                                                                                      \n",
    "pyplot.ylabel( 'accuracy' )\n",
    "\n",
    "pyplot.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从结果上来看 gamma取0.1 C取10时，模型性能比较好，accuracy准确率在0.759和linearSVM的结果差不多。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "总结，感觉模型评价还是用 accuracy比较好，比较直观，另外，不知道为啥我在模型中加了class_weight的参数后，无论怎么调结果都不怎么好，另外在gridserch中好像改变模型的评价指标，会对结果产生很大的影响"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
